﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 异常处理01
{
    class Program
    {
        static void Main(string[] args)
        {
            // 异常就是运行时的错误
            //Divide(12, 0);  // 一旦出现异常，程序会终止

            // 防止出现异常导致程序终止，我们要捕获异常
            // 异常的处理使用try..Catch..关键字
            // 把可能出现异常的代码，或者是需要捕获异常的代码载入try代码块
            try{
                Divide(4, 0);

                string str = "qwer";
                str.Insert(5, "t");

                int[] i = new int[3];
                i[3] = 4;
            }
            catch (DivideByZeroException e){
                Console.WriteLine(e.GetType().Name);
                Animal a = new Animal();
                a.M();
                // 抛出异常，重新引发异常
                // throw可以追根溯源，直至找到异常出现的根源，但是throw e（e代表一个异常对象） 只能找到异常抛出的地方
                throw;
            }
            catch (ArgumentOutOfRangeException e){
                Console.WriteLine(e.GetType().Name);
                //throw
            }
            catch (IndexOutOfRangeException e){
                Console.WriteLine(e.GetType().Name);
                //throw
            }
            Console.WriteLine("今天天很好");

            // 异常的功能
            // 1.通过不断的调试，降低异常的概率，提高代码的健壮性——平时
            // 2.做为消息进行传递
        }

        public static float Divide(int f1, int f2)
        {
            return f1 / f2;
        }

        public class Animal
        {
            public int ID { get; set; }
            public string Name { get; set; }
            public void M()
            {
                Console.WriteLine("Animal.M");
            }
        }
    }
}
